#ifndef CDEVICEFACTORY_H_
#define CDEVICEFACTORY_H_

#include "zlbase/global.h"
#include "zlbase/protocol/IProtocol.h"
#include "zlbase/datalink/IBaseDatalink.h"

namespace zl
{
namespace zlbase
{

/// \brief 设备工厂类
///
/// 提供多个工厂函数用于创建不通类别的设备实例，用于创建和管理库内部以及外部插件的实例对象。
/// 目前支持的模板实例为：
/// 开门板设备类：template class CDeviceFactory<IDoorControlBoard>;
/// 监控板设备类：template class CDeviceFactory<IMonitorControlBoard>;
/// 温控板设备类：template class CDeviceFactory<ITemperatureControlBoard>;
template <class T>
class ZLBASE_API CDeviceFactory
{
public:
    CDeviceFactory();
    ~CDeviceFactory();

    /// \brief 创建设备实例
    std::shared_ptr<T> Concreate();

    /// \brief 创建设备实例
    ///
    /// \param[in] uuid 所使用的协议的uuid
    /// \param[in] opt 链路选项
    /// \return 设备对象
    std::shared_ptr<T> Concreate(const char *uuid, const DatalinkOption &opt);
};

} // namespace zlbase
} // namespace zl

#endif // CDEVICEFACTORY_H_